﻿using System;

namespace Kyoh.Lib.Component.Arguments
{
    /// <summary>引数オブジェクトを装飾する属性の基本クラスを実装します。</summary>
    public abstract class ArgumentAttributeBase : Attribute
    {
        /// <summary><see cref="Prefixes"/> プロパティに有効な値を設定しなかった場合に使用されるデフォルトの接頭文字を取得します。</summary>
        /// <returns><see cref="Prefixes"/> プロパティに有効な値を設定しなかった場合に使用されるデフォルトの接頭文字。</returns>
        public static char[] GetDefaultPrefixes()
        {
            return new[] { '/' };
        }

        /// <summary><see cref="Separators"/> プロパティに有効な値を設定しなかった場合に使用されるデフォルトの区切り文字を取得します。</summary>
        /// <returns><see cref="Separators"/> プロパティに有効な値を設定しなかった場合に使用されるデフォルトの区切り文字。</returns>
        public static char[] GetDefaultSeparators()
        {
            return new[] { '=' };
        }

        /// <summary>接頭文字として使用する文字の配列。</summary>
        internal protected char[] prefixes;
        /// <summary>区切り文字として使用する文字の配列。</summary>
        internal protected char[] separators;

        /// <summary>接頭文字として使用する文字（複数指定可）を、文字列で指定します。</summary>
        public string Prefixes
        {
            get { return null; }
            set
            {
                if (string.IsNullOrEmpty(value))
                    this.prefixes = null;
                else
                    this.prefixes = value.Replace(" ", string.Empty).ToCharArray();
            }
        }

        /// <summary>区切り文字として使用する文字（複数指定可）を、文字列で指定します。</summary>
        public string Separators
        {
            get { return null; }
            set
            {
                if (string.IsNullOrEmpty(value))
                    this.separators = null;
                else
                    this.separators = value.Replace(" ", string.Empty).ToCharArray();
            }
        }

    }
}
